package com.dys.test10;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
 * @className: com.dys.test07.SendTest
 * @description: 发送方法
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/21 下午10:53
 */
public class SendTest {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        System.out.println("学生上线......");
        // 1.准备套接字,指定发送方的端口号
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(8888);
            // 2.准备数据包
            Scanner sc = new Scanner(System.in);
            System.out.print("发送方：");
            // 动态输入
            String sendData = sc.next();
            byte[] dataBytes = sendData.getBytes();

            /*
             * 需要四个参数；
             * 1.指的是传送数据转为字节数组
             * 2.字节数组的长度
             * 3.封装接收方的ip
             * 4.指定接收方的端口号
             * */
            DatagramPacket dp = new DatagramPacket(dataBytes, dataBytes.length, InetAddress.getByName("localhost"), 9999);
            // 3.发送
            ds.send(dp);

            // 接收 接收方的回复
            byte[] b = new byte[1024];
            DatagramPacket dp2 = new DatagramPacket(b, b.length);
            // 3.接收对方的数据包, 然后放入dp数据包中填充,接收完后，dp里面就填充好内容了
            ds.receive(dp2);
            // 4.取出数据
            byte[] data = dp2.getData();
            // 取出数据包中的有效长度
            String receiveData = new String(data, 0, dp2.getLength());
            System.out.println("接收方回复我说：" + receiveData);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            // 4.关闭资源
            if (ds != null) {
                ds.close();
            }
        }

    }
}
